/*****************************************************************************************
 * FILE NAME: drv_gpio                       COPYRIGHT (c) cos 2024
 * REVISION:  1.0.0                                     All Rights Reserved
 * DESCRIPTION:
 * =======================================================================================
 * UPDATE HISTORY:
 * REV      AUTHOR      DATE
 * v1.0.0   Tuxin       2024.10.14
 * DESCRIPTION OF CHANGE:
 ****************************************************************************************/
#ifndef __DRV_GPIO_H
#define __DRV_GPIO_H

//----------------------------------------------------------------------------------------
// @Project Includes
#include "typedefs.h"

//----------------------------------------------------------------------------------------
// @Global Macro Define in the module
#define GPIO_PIN_LED		    		(GPIO_PIN_13)
#define GPIO_PORT_LED		  			(GPIOC)
#define LED_SET()				  			GPIO_SetBits(GPIO_PORT_LED,GPIO_PIN_LED)
#define LED_RESET()							GPIO_ResetBits(GPIO_PORT_LED,GPIO_PIN_LED)
#define LED_TOGGLE()	    			GPIO_TogglePin(GPIO_PORT_LED,GPIO_PIN_LED)

//#define GPIO_PIN_RS485		    	(GPIO_PIN_7)
//#define GPIO_PORT_RS485		  		(GPIOA)
//#define RS485_RECEIVE()				  GPIO_ResetBits(GPIO_PORT_RS485,GPIO_PIN_RS485)
//#define RS485_SEND()						GPIO_SetBits(GPIO_PORT_RS485,GPIO_PIN_RS485)

#define GPIO_PIN_COMPOWER		    (GPIO_PIN_15)
#define GPIO_PORT_COMPOWER		  (GPIOB)
#define COMPOWER_SET()				  GPIO_SetBits(GPIO_PORT_COMPOWER,GPIO_PIN_COMPOWER)
#define COMPOWER_RESET()				GPIO_ResetBits(GPIO_PORT_COMPOWER,GPIO_PIN_COMPOWER)

#define GPIO_PIN_PCHG		    		(GPIO_PIN_9)
#define GPIO_PORT_PCHG			  	(GPIOB)
#define PCHG_SET()				  		GPIO_SetBits(GPIO_PORT_PCHG,GPIO_PIN_PCHG)
#define PCHG_RESET()						GPIO_ResetBits(GPIO_PORT_PCHG,GPIO_PIN_PCHG)

#define GPIO_PIN_BUZ		    		(GPIO_PIN_2)
#define GPIO_PORT_BUZ			  		(GPIOA)
#define BUZ_SET()				  			GPIO_SetBits(GPIO_PORT_BUZ,GPIO_PIN_BUZ)
#define BUZ_RESET()							GPIO_ResetBits(GPIO_PORT_BUZ,GPIO_PIN_BUZ)

#define GPIO_PIN_VBAT		    		(GPIO_PIN_8)
#define GPIO_PORT_VBAT				  (GPIOA)
#define VBAT_SET()				  		GPIO_SetBits(GPIO_PORT_VBAT	,GPIO_PIN_VBAT)
#define VBAT_RESET()						GPIO_ResetBits(GPIO_PORT_VBAT	,GPIO_PIN_VBAT)


#define CHG_INPUT_PORT        	(GPIOA)
#define CHG_INPUT_PIN         	(GPIO_PIN_3)
#define CHG_INPUT_EXTI_LINE   	(EXTI_LINE3)
#define CHG_INPUT_PORT_SOURCE 	(GPIOA_PORT_SOURCE)
#define CHG_INPUT_PIN_SOURCE  	(GPIO_PIN_SOURCE3)
#define CHG_INPUT_IRQN        	(EXTI3_IRQn)
#define CHG_DET_READ()			    GPIO_ReadInputDataBit(CHG_INPUT_PORT,CHG_INPUT_PIN)

#define LOAD_INPUT_PORT        	(GPIOA)
#define LOAD_INPUT_PIN         	(GPIO_PIN_4)
#define LOAD_INPUT_EXTI_LINE   	(EXTI_LINE4)
#define LOAD_INPUT_PORT_SOURCE 	(GPIOA_PORT_SOURCE)
#define LOAD_INPUT_PIN_SOURCE  	(GPIO_PIN_SOURCE4)
#define LOAD_INPUT_IRQN        	(EXTI4_IRQn)
#define LOAD_DET_READ()			    GPIO_ReadInputDataBit(LOAD_INPUT_PORT,LOAD_INPUT_PIN)

#define COM_INPUT_PORT        	(GPIOB)
#define COM_INPUT_PIN         	(GPIO_PIN_14)
#define COM_INPUT_EXTI_LINE   	(EXTI_LINE14)
#define COM_INPUT_PORT_SOURCE 	(GPIOB_PORT_SOURCE)
#define COM_INPUT_PIN_SOURCE  	(GPIO_PIN_SOURCE14)
#define COM_INPUT_IRQN        	(EXTI15_10_IRQn)
#define COM_DET_READ()			     GPIO_ReadInputDataBit(COM_INPUT_PORT,COM_INPUT_PIN)

#define SW_INPUT_PORT        		(GPIOA)
#define SW_INPUT_PIN         		(GPIO_PIN_7)
#define SW_INPUT_EXTI_LINE   		(EXTI_LINE7)
#define SW_INPUT_PORT_SOURCE 		(GPIOA_PORT_SOURCE)
#define SW_INPUT_PIN_SOURCE  		(GPIO_PIN_SOURCE7)
#define SW_INPUT_IRQN        		(EXTI9_5_IRQn)
#define SW_DET_READ()			    	GPIO_ReadInputDataBit(SW_INPUT_PORT,SW_INPUT_PIN)

#define CRG_INPUT_PORT        	(GPIOA)
#define CRG_INPUT_PIN         	(GPIO_PIN_5)
#define CRG_INPUT_EXTI_LINE   	(EXTI_LINE5)
#define CRG_INPUT_PORT_SOURCE 	(GPIOA_PORT_SOURCE)
#define CRG_INPUT_PIN_SOURCE  	(GPIO_PIN_SOURCE5)
#define CRG_INPUT_IRQN        	(EXTI9_5_IRQn)
#define CRG_DET_READ()			     GPIO_ReadInputDataBit(CRG_INPUT_PORT,CRG_INPUT_PIN)

#define DI_INPUT_PORT        		(GPIOA)
#define DI_INPUT_PIN         		(GPIO_PIN_6)
#define DI_INPUT_EXTI_LINE   		(EXTI_LINE6)
#define DI_INPUT_PORT_SOURCE 		(GPIOA_PORT_SOURCE)
#define DI_INPUT_PIN_SOURCE  		(GPIO_PIN_SOURCE6)
#define DI_INPUT_IRQN        		(EXTI9_5_IRQn)
#define DI_DET_READ()			    	GPIO_ReadInputDataBit(DI_INPUT_PORT,DI_INPUT_PIN)

//----------------------------------------------------------------------------------------
// @Global Type defines in the module

//----------------------------------------------------------------------------------------
// @Export global Variables declare in the module

//----------------------------------------------------------------------------------------
// @Export declaration of functions in the module
void drv_gpio_sleep(void);
void drv_gpio_wakeup(void);
void drv_gpio_init(void);
void drv_gpio_outputInit (GPIO_Module* GPIOx, uint16_t pin,GPIO_ModeType gpio_mode);

#endif

// =======================================================================================
// End of file.
// =======================================================================================
